//
//  HMUserAccountViewModel.swift
//  Weibo
//
//  Created by 黄亦寒 on 2016/9/23.
//  Copyright © 2016年 HM. All rights reserved.
//

import UIKit
//ViewModel作用：1.封装授权页面的网络请求，对应的是HMOAuthVc
//              2.读取归档用户对象
class HMUserAccountViewModel: NSObject {
    //单例的全局访问点
    static let sharedHMUserAccountViewModel:HMUserAccountViewModel = HMUserAccountViewModel()
    
    //读取归档用户对象
    var userAccount:HMUserAccount? {
        return HMUserAccount.loadUserAccount()
    }
    
    //判断是否登录
    var isLogin:Bool {
        return accessToken != nil
    }
    
    //判断令牌是否过期
    var accessToken:String? {
        //获取令牌对象
        let token = userAccount?.access_token
        
        //获取过期时间对象
        let expiresDate = userAccount?.expiresDate
        
        //判断令牌是否存在
        if let t = token {
            //如果令牌存在，判断过期时间是否大于当前时间表示令牌没有过期
            if expiresDate?.compare(Date()) == .orderedDescending {
                return t
            }else{
                //过期了就返回nil
                return nil
            }
        }else{
            //如果令牌不存在，直接返回nil
            return nil
        }
    }
    
    //通过code取到accessToken的方法
    func requestAccesstoken(code:String,callBack:@escaping (Bool)->()) {
        NetworkTools.sharedTools.requestAccessToken(code: code) { (response, error) in
            if error != nil {
                print("网络请求异常:\(error)")
                callBack(false)
                return
            }
            
            //执行到此说明请求成功，返回的数据是一个字典
            //print("字典\(response)")
            //判断返回到数据格式是否正确
            guard let dic = response as?[String:Any] else{
                print("字典的格式不正确")
                callBack(false)
                return
            }
            //            "access_token" = "2.00nNjs1D07NIRua713670b2cLjuuzD";
            //            "expires_in" = 157679999;
            //            "remind_in" = 157679999;
            //            uid = 3056968763;
            //执行到此说明数据格式没有问题，进行字典转模型
            let userAccount = HMUserAccount(dic:dic)
            //print("令牌:\(userAccount.access_token)")
            //获取用户信息
            self.requestUserInfo(userAccount: userAccount,callBack:callBack)
        }
    }
    
    //获取用户信息的方法
    func requestUserInfo(userAccount:HMUserAccount,callBack:@escaping (Bool)->()) -> Void {
        NetworkTools.sharedTools.requestUserInfo(accessToken: userAccount.access_token!, uid: Int(userAccount.uid)) { (response, error) in
            
            if error != nil {
                print("请求异常:\(error)")
                callBack(false)
            }
            //执行到此，说明请求成功,返回的数据是一个字典
            //print("用户信息:\(response)")
            //判断返回到数据格式是否正确
            guard let dic = response as?[String:Any] else{
                print("字典的格式不正确")
                callBack(false)
                return
            }
            
            //执行到此说明数据格式没有问题，取出需要保存的用户信息
            //名字
            let name = dic["name"]
            //头像
            let avatar_large = dic["avatar_large"]
            //保存到模型
            userAccount.name = name as! String?
            userAccount.avatar_large = avatar_large as! String?
            //            print(name)
            //            print(avatar_large)
            //用户登录成功后保存用户信息到沙盒
            userAccount.saveUserAccount()
            callBack(true)
        }
    }
}
